#include <vector>
#include <queue>
#include "sched_fcfs.h"

using namespace std;

SchedFCFS::SchedFCFS(vector<int> argn) {
	// FCFS recibe la cantidad de cores.
}

SchedFCFS::~SchedFCFS() {

}

void SchedFCFS::load(int pid) {
    cola.push(pid); 
}

void SchedFCFS::unblock(int pid) {

//Continua la primer tarea hasta que termine de ser servida.
}

int SchedFCFS::tick(int cpu, const enum Motivo m) {
int sig;
    if(m==BLOCK){return current_pid(cpu);}
 if (m == TICK) {//si la primer tarea no termino, continua la primer tarea.
		if (current_pid(cpu) == IDLE_TASK && !cola.empty()) {//si la tarea actual es IDLE pero hay tareas pendientes, se carga la primer tarea pendiente para no continuar ejecutando IDLE, quitando la primer tarea del queue.
			sig = cola.front(); 
            cola.pop();
			return sig;
		}
       else {//si se estaba ejecutando una tarea que no era IDLE, se continua con esa tarea.
			return current_pid(cpu);
	    }
 }
 else     {//si termino la primer tarea, la siguiente es la primera de la queue si quedan tareas pendientes, o IDLE si no quedan mas tareas pendientes.
	   if (cola.empty()) return IDLE_TASK;//si no quedan mas tareas, devuelvo IDLE.
	   else {//si quedan tareas, devuelvo la primera y la quito de la queue, porque se que se ejecutará hasta que termine.
			sig = cola.front(); 
            cola.pop();
			return sig;
		}
 }
}
